package cn.xawl.interview.thread;

import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;

/**
 * @author lh
 * @date 2020/08/26 15:36:28
 **/
public class CyclicBarrierDemo {

    public static void main(String[] args) {
        //两种构造器，一种是只有等待的线程个数，这些线程还是会执行后等待其他线程。只不过全部执行完后，没有最终动作；
        // 另一种还附带一个Runnable，就是所有线程执行结束后，会有一个最终线程Runnable执行。
        CyclicBarrier cyclicBarrier = new CyclicBarrier(7, () -> System.out.println("召唤神龙"));

        for (int i = 1; i <= 7; i++) {
            new Thread(() -> {
                System.out.println("收集到第" + Thread.currentThread().getName() + "颗龙珠");
                //执行完成后，就等待
                try {
                    cyclicBarrier.await();
                } catch (InterruptedException | BrokenBarrierException e) {
                    e.printStackTrace();
                }
            }, String.valueOf(i)).start();
        }


    }

}
